#ifndef CONNECTION_H
#define CONNECTION_H

#include <mysql/mysql.h>
#include <string>
#include <chrono>

#include "public.h"   // for log

using namespace std;

/* 实现数据库的CRUD操作 */

class Connection{
public:
    // 初始化数据库连接
    Connection();
    // 释放数据库连接资源
    ~Connection();
    
    // 连接数据库
    bool connect(std::string ip, const unsigned short port, std::string user, std::string passwd, std::string dbname);
    // 更新操作 insert、 delete、 update
    bool update(std::string sql);
    // 查询操作 select 
    MYSQL_RES * query(std::string sql);

    // 刷新refresh连接的起始的空间时间
    void refreshAliveTime();
    // 返回存活的时间, 使用doublt表示秒数
    std::chrono::duration<double> getAliveTime() const;

private:
    MYSQL * _conn = nullptr;   // 数据库连接句柄
    std::chrono::steady_clock::time_point _aliveTime;  // 记录进入空闲状态后的起始存活time_point
};

#endif